use serde::{Deserialize, Serialize};

/// Agent categories for different specialized capabilities
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum AgentCategory {
    /// Embed agent for knowledge base operations
    Embed,
    /// Image agent for image generation capabilities
    Image,
    /// Chat agent for conversational interactions
    Chat,
}

/// Enhanced agent configuration with category and specialized capabilities
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnhancedAgentConfig {
    /// Basic agent configuration
    #[serde(flatten)]
    pub base_config: super::agents::AgentConfig,

    /// Agent category for specialized capabilities
    pub category: AgentCategory,

    /// Knowledge base configuration
    pub knowledge_base: Option<KnowledgeBaseConfig>,

    /// Vector database configuration
    pub vector_db: Option<VectorDbConfig>,
}

/// Knowledge base configuration
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KnowledgeBaseConfig {
    /// Path to the knowledge base file
    pub path: String,
    /// Whether to enable the knowledge base
    pub enabled: bool,
}

/// Vector database configuration
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VectorDbConfig {
    /// Path to the vector database
    pub path: String,
    /// Table name for storing vectors
    pub table_name: String,
    /// Dimension of the vectors
    pub dimension: usize,
}
